(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ОТДЕЛ Вставкой2;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(* НАЗНАЧЕНИЕ: упорядочивание ряда двоичной вставкой *)
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Упорядочить-(ряд+:РЯД ИЗ ЦЕЛ);
(* Цель: упорядочивание ряда целых чисел двоичной вставкой
* До: <ряд> - исходный ряд
* После: <ряд> - упорядоченный ряд *)
ПЕР
число:ЦЕЛ; (* обрабатываемое число *)
позНеуп:ЦЕЛ; (* до этой позиции ряд уже упорядочен *)
позВставки:ЦЕЛ;(* позиция вставки для обрабатываемого числа *)
позНачала,поз:ЦЕЛ;
УКАЗ
ОТ позНеуп:=1 ДО РАЗМЕР(ряд)-1 ВЫП
число:=ряд[позНеуп];
(* двоичный поиск позиции вставки *)
позНачала:=0; позВставки:=позНеуп;
ПОКА позНачала < позВставки ВЫП
поз:=(позВставки+позНачала) ДЕЛИТЬ 2;
ЕСЛИ число >= ряд[поз] ТО
позВставки:=поз
ИНАЧЕ
позНачала:=поз+1
КОН
КОН;
(* раздвигаем в этом месте ряд *)
ОТ поз:=позНеуп-1 ДО позВставки ПО -1 ВЫП
ряд[поз+1]:=ряд[поз]
КОН;
(* вставляем туда число *)
ряд[позВставки]:=число
КОН
КОН Упорядочить;
КОН Вставкой2.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|